Peer-to-peer collaboration systems are used, generally in business settings, to allow multiple users to work collaboratively even though the users may be in different locations. A peer-to-peer collaboration system is implemented with computing devices interconnected by a network. Each of the peer devices may maintain a copy of data or other information that is displayed to or acted on by the collaborating users. That information creates what is called a “shared space.”
Client software in each of the peer devices allows the user of that device to change the copy of the shared space maintained by that device. As each change is made, the client broadcasts messages indicating the changes made to the shared space. Other peer devices in a collaboration session receive those change messages and make corresponding changes to their copies of the shared space. In this way, all of the copies of the shared space are synchronized and every user in the collaboration session can view changes made by every other user.
However, for the collaboration system to function as intended, each peer device must be able to communicate changes to every other peer device. A network, such as the Internet, theoretically can be used to allow communication between any two peer devices coupled to the network. However, some private networks, though coupled to the Internet, are not configured to allow peer devices coupled to the Internet through the private network to engage in peer-to-peer communications with devices outside the private network. For example, many local area networks (LANs) use network address translation (NAT) at the interface between the private network and the Internet. Address translation can disrupt messages directed to a peer behind a NAT device, thereby interfering with peer-to-peer communication.
To avoid the disruption of a collaboration session when some devices are behind a NAT device or are otherwise unreachable from other peers, collaboration systems use relay servers. A peer unable to communicate directly with another peer may communicate indirectly by sending the message first to a relay server. The relay server may forward the message to the recipient peer. In some instances, the relay server will forward the message directly to the recipient peer. Though, in other scenarios, the message will be forwarded through one or more other relay servers before it reaches the recipient peer.